﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using System.Diagnostics;
using be.brandweernijlen.ademtoestellen.Model;
using be.brandweernijlen.ademtoestellen.Controllers;

namespace be.brandweernijlen.ademtoestellen
{
    public partial class FrmMain : Form
    {
        private List<Masker> maskers;
        private List<LongAutomaat> longAutomaten;
        private List<AdemLuchtToestel> ademLuchtToestellen;

        private DbController dbController;
        public FrmMain()
        {
            InitializeComponent();

        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
            dbController = new DbController();
        }

        private void btnAddRow_Click(object sender, EventArgs e)
        {

        }

        private void cbType_SelectedIndexChanged(object sender, EventArgs e)
        {
            makeInvisible();
           switch (cbType.SelectedIndex)
           {
               case 0:
                   ucAdemLuchtToestel1.Visible = true;
                   break;
               case 1:
                   ucLongAutomaat1.Visible = true;
                   break;
               case 2:
                   ucMasker1.Visible = true;
                   break;
           }

           btnOpslaan.Visible = true;
        }

        private void makeInvisible()
        {
            lblSelect.Visible = false;
            ucMasker1.Visible = false;
            ucLongAutomaat1.Visible = false;
            ucAdemLuchtToestel1.Visible = false;
        }

        private void btnOpslaan_Click(object sender, EventArgs e)
        {
            if (veldenOK())
            {
                switch (cbType.SelectedIndex)
                {
                    case 0:
                        ademLuchtToestelOpslaan();
                        break;
                    case 1:
                        longAUtomaatOpslaan();
                        break;
                    case 2:
                        maskerOpslaan();
                        break;
                }
            }
            else
            {
                MessageBox.Show("Niet alle benodigde velden zijn ingevuld", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private Boolean veldenOK()
        {

            switch (cbType.SelectedIndex)
            {
                case 0:
                    if (!ucAdemLuchtToestel1.isOK())
                        return false;
                    break;
                case 1:
                    if (!ucLongAutomaat1.isOK())
                        return false;
                    break;
                case 2:
                    if (!ucMasker1.isOK())
                        return false;
                    break;
            }

            if (String.IsNullOrEmpty(txtVerantwoordelijke.Text) || String.IsNullOrEmpty(cbType.Text))
            {
                return false;
            }

            return true;
        }

        private void maskerOpslaan()
        {
            Masker masker = ucMasker1.getMasker(txtVerantwoordelijke.Text, dtpDatum.Value);
            dbDataset.MaskerRow newRow = dbController.createNewMasker(dbDataset1, masker);

            maskerTableAdapter1.Update(dbDataset1);

        }

        private void longAUtomaatOpslaan()
        {
            LongAutomaat longAutomaat = ucLongAutomaat1.getLongAutomaat(txtVerantwoordelijke.Text, dtpDatum.Value);
            dbDataset.LongAutomaatRow newRow = dbController.createNewLongAutomaat(dbDataset1, longAutomaat);
            longAutomaatTableAdapter1.Update(dbDataset1);
        }

        private void ademLuchtToestelOpslaan()
        {
            AdemLuchtToestel ademLuchtToestel = ucAdemLuchtToestel1.getAdemluchtToestel(txtVerantwoordelijke.Text, dtpDatum.Value);
            dbDataset.AdemLuchtToestelRow newRow = dbController.createNewALT(dbDataset1, ademLuchtToestel);
            ademLuchtToestelTableAdapter1.Update(dbDataset1);
        }

        private void btnZoeken_Click(object sender, EventArgs e)
        {
            DateTime van = dtpZoekenVan.Value;
            DateTime tot = dtpZoekenTot.Value;

            van = DateTime.Parse(van.ToShortDateString());
            tot  = DateTime.Parse(tot.ToShortDateString() + " 23:59:59");
            String verantwoordelijke = cbZoekenVerantwoordelijke.Text;
            String nummer = txtZoekNummer.Text;
            String nummerDraagstel = txtZoekNummerDraagstel.Text;
            dgvGeschiedenis.Rows.Clear();

            if (String.IsNullOrEmpty(verantwoordelijke))
                verantwoordelijke = "%";


            if (String.IsNullOrEmpty(nummer))
                nummer = "%";


            if (String.IsNullOrEmpty(nummerDraagstel))
                nummerDraagstel = "%";

            switch (cbZoekenType.SelectedIndex)
            {
                case 0:
                    ademLuchtToestelZoeken(van, tot, verantwoordelijke, nummer, nummerDraagstel);
                    break;
                case 1:
                    longAUtomaatZoeken(van, tot, verantwoordelijke, nummer);
                    break;
                case 2:
                    maskerZoeken(van, tot, verantwoordelijke, nummer);
                    break;
            }
        }

        private void maskerZoeken(DateTime van, DateTime tot, string verantwoordelijke, String nummer)
        {
            maskers = dbController.zoekMasker(tableAdapterManager2, van, tot, verantwoordelijke, nummer);

            foreach (Masker masker in maskers)
            {
                DataGridViewRow row = new DataGridViewRow();
                DataGridViewTextBoxCell datumCell = new DataGridViewTextBoxCell();
                DataGridViewTextBoxCell verantwoordelijkeCell = new DataGridViewTextBoxCell();
                DataGridViewTextBoxCell nummerCell = new DataGridViewTextBoxCell();
              
                datumCell.Value = masker.Datum;
                verantwoordelijkeCell.Value = masker.Verantwoordelijke;
                nummerCell.Value = masker.NummerMasker;

                row.Cells.Add(datumCell);
                row.Cells.Add(verantwoordelijkeCell);
                row.Cells.Add(nummerCell);
 

                dgvGeschiedenis.Rows.Add(row);
            }
        }

        private void ademLuchtToestelZoeken(DateTime van, DateTime tot, String verantwoordelijke, String nummerFles, String nummerDraagstel)
        {
            ademLuchtToestellen = dbController.zoekAdemLuchtToestel(tableAdapterManager2, van, tot, verantwoordelijke, nummerFles, nummerDraagstel);

            foreach (AdemLuchtToestel ademLuchtToestel in ademLuchtToestellen)
            {
                DataGridViewRow row = new DataGridViewRow();

                DataGridViewTextBoxCell datumCell = new DataGridViewTextBoxCell();
                DataGridViewTextBoxCell verantwoordelijkeCell = new DataGridViewTextBoxCell();
                DataGridViewTextBoxCell nummerCell = new DataGridViewTextBoxCell();

                datumCell.Value = ademLuchtToestel.Datum;
                verantwoordelijkeCell.Value = ademLuchtToestel.Verantwoordelijke;
                nummerCell.Value = ademLuchtToestel.NummerFles;

                row.Cells.Add(datumCell);
                row.Cells.Add(verantwoordelijkeCell);
                row.Cells.Add(nummerCell);


                dgvGeschiedenis.Rows.Add(row);
            }
        }

        private void longAUtomaatZoeken(DateTime van, DateTime tot, string verantwoordelijke, String nummer)
        {
            longAutomaten = dbController.zoekLongAutomaat(tableAdapterManager2, van, tot, verantwoordelijke, nummer);
            
            foreach (LongAutomaat longAutomaat in longAutomaten)
            {
                DataGridViewRow row = new DataGridViewRow();

                DataGridViewTextBoxCell datumCell = new DataGridViewTextBoxCell();
                DataGridViewTextBoxCell verantwoordelijkeCell = new DataGridViewTextBoxCell();
                DataGridViewTextBoxCell nummerCell = new DataGridViewTextBoxCell();

                datumCell.Value = longAutomaat.Datum;
                verantwoordelijkeCell.Value = longAutomaat.Verantwoordelijke;
                nummerCell.Value = longAutomaat.NummerLongAutomaat;

                row.Cells.Add(datumCell);
                row.Cells.Add(verantwoordelijkeCell);
                row.Cells.Add(nummerCell);


                dgvGeschiedenis.Rows.Add(row);
            }
        }

        private void dgvGeschiedenis_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int index = e.RowIndex;
            switch (cbZoekenType.SelectedIndex)
            {
                case 0:
                     AdemLuchtToestel selectedAdemLuchtToestel = ademLuchtToestellen[index];
                     PDFController.generateAdemLuchtToestelPDF(selectedAdemLuchtToestel);

                    Process.Start("tempAdemLuchtToestel.pdf");
                    break;
                case 1:
                    LongAutomaat selectedLongautomaat = longAutomaten[index];
                    PDFController.generatLongAutomaatPDF(selectedLongautomaat);

                    Process.Start("tempLongAutomaat.pdf");
                    break;
                case 2:
                    Masker selectedMasker = maskers[index];
                    PDFController.generateMaskerPDF(selectedMasker);

                    Process.Start("tempMasker.pdf");
                    break;
            }
          
        }

        private void dgvGeschiedenis_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
        
            switch (cbZoekenType.SelectedIndex)
            {
                case 0:
                    PDFController.generateAdemLuchtToestelPDF(ademLuchtToestellen);
                    Process.Start("tempAdemLuchtToestel.pdf");
                    break;
                case 1:
                    PDFController.generatLongAutomaatPDF(longAutomaten);
                    Process.Start("tempLongAutomaat.pdf");
                    break;
                case 2:
                    PDFController.generateMaskerPDF(maskers);
                    Process.Start("tempMasker.pdf");
                    break;
            }
        }

        private void cbZoekenType_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbZoekenType.SelectedIndex == 0)
            {
                txtZoekNummerDraagstel.Visible = true;
                lblZoekDraagstel.Visible = true;
            }
            else
            {
                txtZoekNummerDraagstel.Visible = false;
                lblZoekDraagstel.Visible = false;
            }
        }

        
    }
}
